#ifndef B2D_B2DTYPES_H
#define B2D_B2DTYPES_H

#include <string>
#include <stdint.h>


// Namespace
#define NS_B2D_BEGIN  namespace b2d {
#define NS_B2D_END }
#define USING_NS_B2D using namespace b2d;
#define NS_B2D_DETAIL_BEGIN namespace detail {
#define NS_B2D_DETAIL_END }

NS_B2D_BEGIN


// strings
typedef std::string string;
typedef std::wstring Wstring;
typedef string ObjectId;
typedef char cstring32[32]; // 32 char string
typedef char cstring64[64]; // 64 char string


// Fixed sized primitives
typedef uint64_t		uint64;
typedef uint32_t		uint32;
typedef uint16_t		uint16;
typedef uint8_t			uint8;
typedef uint32			uint;
typedef uint16			ushort;
typedef int32_t			int32;
typedef int16_t			int16;
typedef int8_t			int8;
typedef unsigned long	ulong;
typedef signed char		byte;
typedef unsigned char	ubyte;
	
// Bitmasks
#define BIT(i) 1 << i
// C++11 constexpr int operator"" _bit(uint8 bit) { return 1 << bit; }


NS_B2D_END

#endif